<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>立即执行函数与块作用域概念</title>
</head>
<body>
    
</body>
<script>
    /*
        立即执行函数 -- 函数会立即执行
            使用到的场景不多，作为了解即可
    */

    // 正常的函数都会经理两步  定义+调用
    name()
    function name(){
        console.log('jimmy')
    }

    // 立即执行函数
    (function(){
        console.log('hhh')
    })()  //hhh
    /*
        其实立即执行函数只是将函数给一步就执行了而已  利用的就是作用域的原理  将函数名和一个函数体作为
    */

    /*
        作用域的好处
            能够让我们一些变量不被污染
                一个{}里面就相当于是一个作用域了  
    */
    {
        var name = 'jimmy'
        let age = '22'
        const sex = 'man'
    }
    console.log(name)  //jimmy
    console.log(age)  // age is not defined
    console.log(sex)  // sex id not defined

    /*
        在ES6之前 还是只能够使用var定义变量 var就是会污染作用域
            所以在ES6的时候  JS推出了 let 和 const   这两个就能够很好的实现块级作用域   
                所以我们在声明变量的时候   最好就是要使用let和const 来分别定义变量以及常量
    */
</script>
</html>